/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.fsl.sicotec.Datos;

import com.fsl.sicotec.comun.Entidades.Cliente;
import com.fsl.sicotec.comun.Interfaces.IdaoCliente;
import SG.Coneccion.Conecta;
import java.sql.*;
import java.util.ArrayList;
import java.util.Collection;

/*
 * Trabajo POO
 */
public class DaoCliente implements IdaoCliente {

    // Varibles para las Transacciones
    Connection cn = null;
    CallableStatement cs = null;
    ResultSet rs = null;
    Cliente cliente = null;
    Collection lista;

    public Collection mostrarClientes() {
        try {
            cn = new Conecta().getConexion();
            cs = cn.prepareCall("{call sp_si_cliente_mostrar ()}");
            rs = cs.executeQuery();
            lista = new ArrayList();

            while (rs.next()) {
                cliente = new Cliente();
                cliente.setCod_cliente(Integer.parseInt(rs.getString(1)));
                cliente.setDni(rs.getString(2));
                cliente.setApe_paterno(rs.getString(3));
                cliente.setApe_materno(rs.getString(4));
                cliente.setNombres(rs.getString(5));
                cliente.setDireccion(rs.getString(6));
                cliente.setTelefono(rs.getString(7));
                cliente.setNombre_contacto(rs.getString(8));
                lista.add(cliente);
            }
            rs.close();
            cs.close();
            cn.close();
        } catch (Exception e) {
            javax.swing.JOptionPane.showMessageDialog(null, e.getMessage());
        }
        return lista;
    }

    public Collection mostrarClienteCodigo(int codigo) {
        try {
            cn = new Conecta().getConexion();
            cs = cn.prepareCall("{call sp_si_cliente_mostrar_x_codigo (?)}");
            cs.setInt(1, codigo);
            rs = cs.executeQuery();
            lista = new ArrayList();

            while (rs.next()) {
                cliente = new Cliente();
                cliente.setDni(rs.getString(1));
                cliente.setApe_paterno(rs.getString(2));
                cliente.setApe_materno(rs.getString(3));
                cliente.setNombres(rs.getString(4));
                cliente.setDireccion(rs.getString(5));
                cliente.setTelefono(rs.getString(6));
                cliente.setNombre_contacto(rs.getString(7));
                lista.add(cliente);
            }
            rs.close();
            cs.close();
            cn.close();
        } catch (Exception e) {
            javax.swing.JOptionPane.showMessageDialog(null, e.getMessage());
        }
        return lista;
    }

    public String registrarCliente(Cliente objCliente) {
        String dni = "";

        try {
            cn = new Conecta().getConexion();
            cs = cn.prepareCall("{call sp_si_cliente_insertar (?,?,?,?,?,?,?,?,?)}");
            cs.setString(1, objCliente.getDni());
            cs.registerOutParameter(1, Types.VARCHAR);
            cs.setString(2, objCliente.getApe_paterno());
            cs.setString(3, objCliente.getApe_materno());
            cs.setString(4, objCliente.getNombres());
            cs.setString(5, objCliente.getDireccion());
            cs.setString(6, objCliente.getTelefono());
            cs.setString(7, objCliente.getNombre_contacto());
            cs.setString(8, objCliente.getUsuario_creacion());
            cs.setString(9, objCliente.getEstacion());
            cs.execute();
            dni = cs.getString(1);
            cs.close();
            cn.close();
        } catch (Exception e) {
            javax.swing.JOptionPane.showMessageDialog(null, e.getMessage());
        }
        return dni;
    }

    public boolean existeCliente(String dni) {
        boolean existe = true;
        String valor = "";

        try {
            cn = new Conecta().getConexion();
            cs = cn.prepareCall("{call sp_si_cliente_existe (?)}");
            cs.setString(1, dni);
            rs = cs.executeQuery();
            while (rs.next()) {
                valor = rs.getString(1);
            }
            if (valor.equals("0")) {
                existe = false;
            }
            rs.close();
            cs.close();
            cn.close();
        } catch (Exception e) {
            javax.swing.JOptionPane.showMessageDialog(null, e.getMessage());
        }
        return existe;
    }

    public void eliminarCliente(int codCliente, String usuario, String estacion) {
        try {
            cn = new Conecta().getConexion();
            cs = cn.prepareCall("{call sp_si_cliente_eliminar (?,?,?)}");
            cs.setInt(1, codCliente);
            cs.setString(2, usuario);
            cs.setString(3, estacion);
            cs.execute();
            cs.close();
            cn.close();
        } catch (Exception e) {
            javax.swing.JOptionPane.showMessageDialog(null, e.getMessage());
        }
    }

    public void actualizarCliente(Cliente objCliente) {
        try {
            cn = new Conecta().getConexion();
            cs = cn.prepareCall("{call sp_si_cliente_actualizar (?,?,?,?,?,?,?,?,?,?)}");
            cs.setInt(1, objCliente.getCod_cliente());
            cs.setString(2, objCliente.getDni());
            cs.setString(3, objCliente.getApe_paterno());
            cs.setString(4, objCliente.getApe_materno());
            cs.setString(5, objCliente.getNombres());
            cs.setString(6, objCliente.getDireccion());
            cs.setString(7, objCliente.getTelefono());
            cs.setString(8, objCliente.getNombre_contacto());
            cs.setString(9, objCliente.getUsuario_creacion());
            cs.setString(10, objCliente.getEstacion());
            cs.execute();
            cs.close();
            cn.close();
        } catch (Exception e) {
            javax.swing.JOptionPane.showMessageDialog(null, e.getMessage());
        }
    }
}
